using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using NUnit.Framework;
using NUnit.Mocks;
using Sistema_Totem.Datos.SqlServer;
using Sistema_Totem.Logica.Clases;

namespace Sistema_Totem.Pruebas
{
    [TestFixture]
    public class PruebaSqlErs
    {
        String nombreproyecto = "ProyectoPrueba";

        #region AgregarErs
        /// <summary>
        /// valida que un ERS se agregue correctamente
        /// </summary>
        [Test]
        public void AgregarErs()
        {
            String ers = "ers1";
            SqlServerErs ersinsertar = new SqlServerErs();
            ersinsertar.AgregarErs(ers);
            //Assert.AreEqual(1, resultado);
            Assert.IsTrue(ersinsertar.SelectIdErs(ers) > 0);
        }
        #endregion AgregarErs;


        #region AgregarPlantillaProyectoSeccion
        /// <summary>
        /// valida que una seccion escogida por el usuario haya sido guardada
        /// </summary>
        [Test]
        public void AgregarPlantillaProyectoSeccion()
        {
            String seccion = "PORTADA";
            SqlServerErs ppsinsertar = new SqlServerErs();
            ppsinsertar.AgregaPlanProySecc(nombreproyecto, seccion);
            //Assert.AreEqual(1, esperado);
            Assert.IsNotNull(ppsinsertar.SelectSeccionesFijadas(nombreproyecto));
            Assert.IsTrue(ppsinsertar.SelectSeccionesFijadas(nombreproyecto).Count > 0);
        }
        #endregion AgregarPlantillaProyectoSeccion;


        #region AgregarPlantillaProyectoElemento
        /// <summary>
        /// valida que un elemento escogido por el usuario se haya guardado correctamente
        /// </summary>
        [Test]
        public void AgregarPlantillaProyectoElemento()
        {
            String seccion = "PORTADA";
            String elemento = "Titulo De proyecto";
            SqlServerErs ppeinsertar = new SqlServerErs();
            ppeinsertar.AgregaPlanProyElem(nombreproyecto, elemento, seccion);
            //Assert.AreEqual(1, elementoespe);
            Assert.IsTrue(ppeinsertar.SelectElementosComponentesErs(nombreproyecto, seccion).Count > 0);
        }
        #endregion AgregarPlantillaProyectoElemento;


        #region AgregarContenidoElemento
        /// <summary>
        /// valida que el contenido de un elemento introducido por el usuario se haya guardado correctamente
        /// </summary>
        [Test]
        public void AgregarContenidoElemento()
        {
            SqlServerErs aceinsertar = new SqlServerErs();
            String elemento = "Titulo De proyecto";
            String contenido = "hola como estas";
            String seccion = "PORTADA";
            int id = aceinsertar.SelectIdErs("ers1");
            aceinsertar.AgregaContenidoElemento(elemento, contenido, nombreproyecto, id);
            //Assert.AreEqual(1, contenidoesperado);
            List<String> contenidoElem = aceinsertar.SelectContenidoElemento(nombreproyecto);
            Assert.IsNotNull(contenidoElem);
            //Assert.AreEqual(true, contenidoElem.Contains(elemento));
            //Assert.AreEqual(true, contenidoElem.Contains(elemento));
            Assert.AreEqual(true, contenidoElem.Contains(contenido + "@" + elemento + "@" + seccion));
        }
        #endregion AgregarContenidoElemento;


        #region SelectSeccionesErs
        /// <summary>
        /// valida la busqueda de las secciones de ERS para un proyecto
        /// </summary>
        [Test]
        public void SelectSeccionesErs()
        {
            String seccion1 = "PORTADA";
            String seccion2 = "INTRODUCCION";
            String seccion3 = "DESCRIPCION GENERAL";
            SqlServerErs seccionesConsult = new SqlServerErs();
            List<String> secciones = seccionesConsult.SelectSeccionesErs(nombreproyecto);
            Assert.IsNotNull(secciones);
            Assert.AreEqual(true, secciones.Contains(seccion1));
            Assert.AreEqual(true, secciones.Contains(seccion2));
            Assert.AreEqual(true, secciones.Contains(seccion3));
        }
        #endregion SelectSeccionesErs;


        #region SelectSeccionesFijadas
        /// <summary>
        /// valida la busqueda de las secciones elegidas por el usuario u obligatorias de ERS para un proyecto
        /// </summary>
        [Test]
        public void SelectSeccionesFijadas()
        {
            String seccionFijada = "PORTADA";
            SqlServerErs seccionesFConsult = new SqlServerErs();
            List<String> secciones = seccionesFConsult.SelectSeccionesFijadas(nombreproyecto);
            Assert.IsNotNull(secciones);
            Assert.AreEqual(true, secciones.Contains(seccionFijada));
        }
        #endregion SelectSeccionesFijadas;


        #region SelectElementosSeccionErs
        /// <summary>
        /// valida la busqueda de los elementos de una seccion de ERS que poseen contenido
        /// </summary>
        [Test]
        public void SelectElementosSeccionErs()
        {
            String seccionEnPlantilla = "PORTADA";
            String elementoEncontrado = "Titulo De proyecto";
            SqlServerErs elementosSConsult = new SqlServerErs();
            List<String> elementos = elementosSConsult.SelectElementosSeccionErs(nombreproyecto, seccionEnPlantilla);
            Assert.IsNotNull(elementos);
            Assert.AreEqual(true, elementos.Contains(elementoEncontrado));
        }
        #endregion SelectElementosSeccionErs;


        #region SelectElementosSeccionErs2
        /// <summary>
        /// valida la busqueda de los elementos de una seccion de ERS
        /// </summary>
        [Test]
        public void SelectElementosSeccionErs2()
        {
            String seccionGeneral = "DESCRIPCION GENERAL";
            String elementoEncontrado = "Caracteristicas del usuario";
            String elementoEncontrado1 = "Restricciones";
            String elementoEncontrado2 = "Suposiciones y dependencias";
            SqlServerErs elementosSConsult = new SqlServerErs();
            List<String> elementos = elementosSConsult.SelectElementosSeccionErs2(nombreproyecto, seccionGeneral);
            Assert.IsNotNull(elementos);
            Assert.AreEqual(true, elementos.Contains(elementoEncontrado));
            Assert.AreEqual(true, elementos.Contains(elementoEncontrado1));
            Assert.AreEqual(true, elementos.Contains(elementoEncontrado2));
        }
        #endregion SelectElementosSeccionErs2;


        #region SelectElementosComponentesErs
        /// <summary>
        /// valida la busqueda de los elementos de una seccion de ERS que fueron elegidos por el usuario u 
        /// obligatorios y su tipo de elemento
        /// </summary>
        [Test]
        public void SelectElementosComponentesErs()
        {
            String seccion = "PORTADA";
            String elemento = "Titulo De proyecto";
            String tipo = "textarea";
            SqlServerErs elementosCConsult = new SqlServerErs();
            List<String> elementos = elementosCConsult.SelectElementosComponentesErs(nombreproyecto, seccion);
            Assert.IsNotNull(elementos);
            Assert.AreEqual(true, elementos.Contains(elemento + "@" + tipo));
        }
        #endregion SelectElementosComponentesErs;


        #region SelectElementosComponentesErs2
        /// <summary>
        /// valida la busqueda de los elementos de una seccion de ERS con su tipo de elemento y tipo de dato 
        /// </summary>
        [Test]
        public void SelectElementosComponentesErs2()
        {
            String seccion = "PORTADA";
            String elemento = "Titulo De proyecto";
            String componenteDevuelto = "textarea";
            String tipoDeDatoDevuelto = "string";
            SqlServerErs elementosCConsult2 = new SqlServerErs();
            String elementoDevuelto = elementosCConsult2.SelectElementosComponentesErs2(nombreproyecto, seccion, elemento);
            Assert.IsNotNull(elementoDevuelto);
            Assert.AreEqual(true, elementoDevuelto.Contains(elemento + "@" + componenteDevuelto + "@" + tipoDeDatoDevuelto));
        }
        #endregion SelectElementosComponentesErs2;


        #region SelectIdErs
        /// <summary>
        /// valida la busqueda del ID ERS dado su nombre
        /// </summary>
        [Test]
        public void SelectIdErs()
        {
            String ersExistente = "ers1";
            SqlServerErs idErsConsult = new SqlServerErs();
            int idErs = idErsConsult.SelectIdErs(ersExistente);
            Assert.IsTrue(idErs > 0);
        }
        #endregion SelectIdErs;


        #region SelectIdErsExistente
        /// <summary>
        /// valida la busqueda del ID ERS dado el nombre del proyecto
        /// </summary>
        [Test]
        public void SelectIdErsExistente()
        {
            SqlServerErs idersEx = new SqlServerErs();
            int consulta = idersEx.SelectIdErsExistente(nombreproyecto);
            Assert.IsTrue(consulta > 0);
        }
        #endregion SelectIdErsExistente;


        #region SelectContenidoElemento
        /// <summary>
        /// valida la busqueda del todos los elementos que contienen contenido
        /// </summary>
        [Test]
        public void SelectContenidoElemento()
        {
            String contenidoEsperado = "hola como estas";
            String elementoEsperado = "Titulo De proyecto";
            String seccionEsperada = "PORTADA";
            SqlServerErs contenidoEConsult = new SqlServerErs();
            List<String> contenido = contenidoEConsult.SelectContenidoElemento(nombreproyecto);
            Assert.IsNotNull(contenido);
            Assert.AreEqual(true, contenido.Contains(contenidoEsperado + "@" + elementoEsperado + "@" + seccionEsperada));
        }
        #endregion SelectContenidoElemento;


        #region ActualizaCont
        /// <summary>
        /// valida la actualizacion del contenido de un elemento
        /// </summary>
        [Test]
        public void ActualizaCont()
        {
            String seccion = "PORTADA";
            String elemento = "Titulo De proyecto";
            String contenido = "nuevo titulo";
            SqlServerErs actualizaC = new SqlServerErs();
            actualizaC.ActualizaCont(nombreproyecto, seccion, elemento, contenido);
            List<String> consulta = actualizaC.SelectContenidoElemento(nombreproyecto);
            Assert.IsNotNull(consulta);
            Assert.AreEqual(true, consulta.Contains(contenido + "@" + elemento + "@" + seccion));
        }
        #endregion ActualizaCont;


        #region Version
        /// <summary>
        /// valida la busqueda de la ultima version del historial de revisiones
        /// </summary>
        [Test]
        public void Version()
        {
            String versionEsperada = "1.0";
            SqlServerErs versionConsult = new SqlServerErs();
            String version = versionConsult.Version(nombreproyecto);
            Assert.IsNotNull(version);
            Assert.AreEqual(version, versionEsperada);
        }
        #endregion Version;


        #region SelectTituloPortada
        /// <summary>
        /// valida la busqueda del titulo de la portada 
        /// </summary>
        [Test]
        public void SelectTituloPortada()
        {
            String tituloEsperado = "nuevo titulo";
            String seccion = "PORTADA";
            SqlServerErs versionConsult = new SqlServerErs();
            String Titulo = versionConsult.SelectTituloPortada(nombreproyecto, seccion);
            Assert.IsNotNull(Titulo);
            Assert.AreEqual(Titulo, tituloEsperado);
        }
        #endregion SelectTituloPortada;


        #region NombreCliente
        /// <summary>
        /// valida la busqueda del cliente involucrado en el proyecto
        /// </summary>
        [Test]
        public void NombreCliente()
        {
            String clienteEsperado = "Victor";
            SqlServerErs clienteConsult = new SqlServerErs();
            String cliente = clienteConsult.NombreCliente(nombreproyecto);
            Assert.IsNotNull(cliente);
            Assert.AreEqual(cliente, clienteEsperado);
        }
        #endregion NombreCliente;


        #region Selecthistorialelemento
        /// <summary>
        /// valida la busqueda del contenido de todos los elementos de la seccion especificada
        /// </summary>
        [Test]
        public void Selecthistorialelemento()
        {
            String seccion = "PORTADA";
            String contenidoEsperado = "nuevo titulo";
            SqlServerErs historialEConsult = new SqlServerErs();
            List<String> historial = historialEConsult.Selecthistorialelemento(nombreproyecto, seccion);
            Assert.IsNotNull(historial);
            Assert.AreEqual(true, historial.Contains(contenidoEsperado));
        }
        #endregion Selecthistorialelemento;


        #region SelectContenidoNombre
        /// <summary>
        /// valida la busqueda del elemento y su contenido para la seccion especificada
        /// </summary>
        [Test]
        public void SelectContenidoNombre()
        {
            String elementoEsperado = "Fecha";
            String contenidoEsperado = "hoy";
            String elementoEsperado2 = "Version";
            String contenidoEsperado2 = "1.0";
            String seccion = "HISTORIAL DE REVISIONES";
            SqlServerErs contenidoNConsult = new SqlServerErs();
            List<String> contenido = contenidoNConsult.SelectContenidoNombre(nombreproyecto, seccion);
            Assert.IsNotNull(contenido);
            Assert.AreEqual(true, contenido.Contains(elementoEsperado));
            Assert.AreEqual(true, contenido.Contains(contenidoEsperado));
            Assert.AreEqual(true, contenido.Contains(elementoEsperado2));
            Assert.AreEqual(true, contenido.Contains(contenidoEsperado2));
        }
        #endregion SelectContenidoNombre;


        #region SeccionesObligatorias
        /// <summary>
        /// valida la busqueda de las secciones definidas como obligatorias
        /// </summary>
        [Test]
        public void SeccionesObligatorias()
        {
            String seccionO = "PORTADA";
            String seccionO1 = "INTRODUCCION";
            String seccionO2 = "TABLA DE CONTENIDO";
            String seccionO3 = "INFORMACION DE APOYO";
            SqlServerErs seccionesOConsult = new SqlServerErs();
            List<String> seccionesO = seccionesOConsult.SeccionesObligatorias(nombreproyecto);
            Assert.IsNotNull(seccionesO);
            Assert.AreEqual(true, seccionesO.Contains(seccionO));
            Assert.AreEqual(true, seccionesO.Contains(seccionO1));
            Assert.AreEqual(true, seccionesO.Contains(seccionO2));
            Assert.AreEqual(true, seccionesO.Contains(seccionO3));
        }
        #endregion SeccionesObligatorias;


        #region ElementosObligatorios
        /// <summary>
        /// valida la busqueda de los elementos definidos como obligatorios
        /// </summary>
        [Test]
        public void ElementosObligatorios()
        {
            String seccionO = "PORTADA";
            String elementoO = "Titulo De proyecto";
            String seccionO1 = "INTRODUCCION";
            String elementoO1 = "1 introduccion";
            String elementoO2 = "1.1 Proposito";
            String elementoO3 = "1.2 Alcance";
            SqlServerErs elementosOConsult = new SqlServerErs();
            List<String> elementosO = elementosOConsult.ElementosObligatorios(nombreproyecto);
            Assert.IsNotNull(elementosO);
            Assert.AreEqual(true, elementosO.Contains(seccionO + "@" + elementoO));
            Assert.AreEqual(true, elementosO.Contains(seccionO1 + "@" + elementoO1));
            Assert.AreEqual(true, elementosO.Contains(seccionO1 + "@" + elementoO2));
            Assert.AreEqual(true, elementosO.Contains(seccionO1 + "@" + elementoO3));
        }
        #endregion ElementosObligatorios;
    }
}